////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  modcustrefptv1.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef MODCUSTREFPTV1_H
#define MODCUSTREFPTV1_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "globalelements.h"
#include "awbglobalelements.h"

#define MODCUSTREFPTV1_NAMESPACE_BEGIN namespace modcustrefptv1 {
#define MODCUSTREFPTV1_NAMESPACE_END }

MODCUSTREFPTV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modCustRefPtv1TriggerDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modCustRefPtv1TriggerDataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerPt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::triggerPointType         triggerPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerData - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                   triggerDataCount;
    UINT32                   triggerDataID;
    awbglobalelements::awbTriggerDataFloatType* triggerData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// modCustRefPtV1type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct modCustRefPtV1type
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableFlag
    ///
    /// Tuning Level:  must_tune
    /// Description:   Enable flag for this custom reference point
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::enableFlagType                enableFlag;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// RefPt
    ///
    /// Tuning Level:  must_tune
    /// Description:   custom reference point
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::awbPointDataType              RefPt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// DistWV
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Weight vector based on distance from custom reference point, 1 level trigger with distance trigger
    ///                control type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modCustRefPtv1TriggerDataType DistWV;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// weightAdj
    ///
    /// Tuning Level:  often_tune
    /// Description:   distance weight adjustmnet factor based on lux index
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    modCustRefPtv1TriggerDataType weightAdj;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixCustRefPtV1type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixCustRefPtV1type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// moduleID
    ///
    /// Tuning Level:  never_tune
    /// Description:   Define module ID, sub module ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::moduleIDType        moduleID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableFlag
    ///
    /// Tuning Level:  must_tune
    /// Description:   module enable flag
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::enableFlagType      enableFlag;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// CustRefPt - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32              CustRefPtCount;
    UINT32              CustRefPtID;
    modCustRefPtV1type* CustRefPt;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixCustRefPtV1typeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixCustRefPtV1typeClass : public ParameterModule, public chromatixCustRefPtV1type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixCustRefPtV1typeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixCustRefPtV1typeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixCustRefPtV1typeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modCustRefPtv1TriggerDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodCustRefPtv1TriggerDataType(
        ParameterFileSymbolTableEntry* entry,
        modCustRefPtv1TriggerDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load modCustRefPtV1type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadmodCustRefPtV1type(
        ParameterFileSymbolTableEntry* entry,
        modCustRefPtV1type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixCustRefPtV1type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixCustRefPtV1type(
        ParameterFileSymbolTableEntry* entry,
        chromatixCustRefPtV1type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixCustRefPtV1type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modCustRefPtv1TriggerDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodCustRefPtv1TriggerDataType(
        modCustRefPtv1TriggerDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload modCustRefPtV1type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadmodCustRefPtV1type(
        modCustRefPtV1type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixCustRefPtV1type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixCustRefPtV1type(
        chromatixCustRefPtV1type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixCustRefPtV1typeClass

MODCUSTREFPTV1_NAMESPACE_END
#endif // MODCUSTREFPTV1_H

